package main

import (
	"flag"
	"log"
	"os"
	"runtime/pprof"
	"strconv"
)

//debug.stack如何使用
//mkdir于mkdirALL的使用
func main() {
	TestProf()
	// fmt.Println("MAIN...GO")
	// s := make([]int, 0, 0)
	// s = append(s, 1, 2, 3, 5, 4)
	// fmt.Printf("%v", s)
	// t := s[3]
	// copy(s[3:], s[4:])
	// fmt.Printf("%v", s)
	// s[len(s)-1] = t
	// fmt.Printf("%v", s)
	// s = append(s[:4], s[4:]...)
	// fmt.Printf("%v", s)
	// copy(s[1:], s[4:])
	// fmt.Printf("test %v", s)
	// len := 0
	// s = s[0 : len+1]
	// fmt.Printf("test2 %v", s)
	// mm.Hello()

	// err := os.Mkdir("test0318 sssssd2f/1234", 0x777)
	// if err != nil {
	// 	fmt.Printf("%s,%s", err, debug.Stack())
	// }

	// err2 := os.MkdirAll("test0318 sssssdf/1234", 0x777)
	// if err2 != nil {
	// 	fmt.Printf("%s,%s", err2, debug.Stack())
	// }
	//
	// testTimer1()
	// testTimer2()
	// testTimer3()
	// testTimer4()
	// testTimer5()
	// testTimer6()
	// testTimer7()
	// testTimer8()
	// testTimer9()
	// testTimer10()
	// testTimer11()
	// testTimer12()
	// p.F1()
	// s.Test3()
	// TestFileOpera1()s
}

//func testTimer1() {
//	fmt.Println("start  pause")
//	t1 := t.NewTimer()
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//}
//
//func testTimer2() {
//	fmt.Println("start  pauseat time")
//	t1 := t.NewTimer()
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.PauseAt(2000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//}
//func testTimer3() {
//	fmt.Println("start  start")
//	t1 := t.NewTimer()
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//}
//func testTimer4() {
//	fmt.Println("start  startAT")
//	t1 := t.NewTimer()
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.StartAt(3000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//}
//func testTimer5() {
//	fmt.Println("start  play Media")
//	t1 := t.NewTimer()
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.PlayMediaStartAt(6000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//}
//func testTimer6() {
//	fmt.Println("start  seekto")
//	t1 := t.NewTimer()
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.SeekTo(6000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}
//
//func testTimer7() {
//	fmt.Println("pause  pause")
//	t1 := t.NewTimer()
//	t1.Start()
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}
//
//func testTimer8() {
//	fmt.Println("pause  pauseat time")
//	t1 := t.NewTimer()
//	t1.Start()
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.PauseAt(2000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}
//func testTimer9() {
//	fmt.Println("pause  start")
//	t1 := t.NewTimer()
//	t1.Start()
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.Start()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}
//func testTimer10() {
//	fmt.Println("pause  startAT")
//	t1 := t.NewTimer()
//	t1.Start()
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.StartAt(3000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}
//func testTimer11() {
//	fmt.Println("pause  play Media")
//	t1 := t.NewTimer()
//	t1.Start()
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.PlayMediaStartAt(6000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}
//func testTimer12() {
//	fmt.Println("pause  seekto")
//	t1 := t.NewTimer()
//	t1.Start()
//	t1.Pause()
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	time.Sleep(time.Second)
//	t1.SeekTo(6000)
//	fmt.Println(t1.IsPause(), t1.CurrentTime(), t1.GetBegin(), t1.DeltaTime())
//	fmt.Println()
//}

// var (

// 	//定义外部输入文件名字

// 	cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file.")
// )

func TestProf() {
	log.Println("begin")

	flag.Parse()

	f, err := os.Create("./cpuprof")

	if err != nil {
		log.Fatal(err)

	}
	defer f.Close()
	pprof.StartCPUProfile(f)
	defer pprof.StopCPUProfile()

	for i := 0; i < 30; i++ {
		fibonacci(i)
		fm, err := os.OpenFile("./memprof"+strconv.FormatInt((int64)(i), 10), os.O_RDWR|os.O_CREATE, 0644)
		if err != nil {
			log.Fatal(err)
		}
		pprof.WriteHeapProfile(fm)
	}

}

//递归实现的斐波纳契数列

func fibonacci(num int) int {
	if num < 2 {
		return 1
	}
	return fibonacci(num-1) + fibonacci(num-2)
}
